TDD - это легко!
Опубликовано 12 Ноябрь 2013 - 13:01 пользователем bivTDD (сокр. от англ. test-driven development — «разработка через тестирование») — это специальная методика разработки ПО, которая основывается на коротких циклах работы, где сначала создаётся тест, а потом функционал.
Преамбула
Недавно, я решил повысить свою компетентность в программировании и начал изучать различные методики разработки ПО. Одной из таким методик оказалась «TDD». Сначала я очень скептически относился к различным методикам, но тяга к новым знаниям перевесила и я начал обучение. Данная методика оказалась очень удобной для работы, потому что перед написанием нужного функционала требуется чётко представлять как он будет работать. Если чётко следовать данной методике, то проблем с рефакторингом не будет так, как рефакторинг проводится часто и над небольшими кусочками кода.
Для чего это нужно?
- Повышения квалификации. Без глубоких знаний ООП и шаблонов проектирования создавать тесты будет довольно проблематично. Если вы планируете использовать TDD , то заодно улучшите знания в ООП, шаблонах проектирования и рефакторинге.
- Дисциплина. TDD систематизирует вашу работу. Вы привыкаете к чёткой системе, делаете вашу быстрее и качественнее. Минимизируется количество багов и повышается читабельность кода.
- Качество кода. Также немаловажными плюсами будет то, что код автоматически поддаётся юнит-тестированию, обладает инверсией контроля, а его поддержание будет дешевле и легче.
Алгоритм
Вам нужно поделить работу на мелкие задания, после этого для каждого задания выполнять цикл из следующих шагов: спроектировать выполнение задачи, написать тест для кода, который будет выполнять нужную задачу, протестировать несуществующий код, написать код, протестировать его, если есть ошибки, то исправить и протестировать, сделать рефакторинг кода, протестировать итоговый код.
Комментарий от Olif:
В первом случае имеется в виду что изначально тест должен проваливаться (если мы говорим о чистом TDD , когда тесты пишутся до того, как пишется код) — т.к еще не существует тестируемого кода.
Если тест проходит, а кода нет — тест некорректен.
Ведь по сути, TDD — непрерывный процесс «Red-Code-Green»:
- написать тест который проваливается
- написать код
- убедиться что тест проходит
- повторить
Инструменты для тестирования
Инструменты для работы играют очень важную роль в работе любого человека. Одним из инструментов программиста является программы для тестирования кода. Есть простые программы, а есть программы, которые могу в некоторой степени эмулировать действия человека.
Таких программ огромное количество, по-этому я лишь приведу пример программ, с которыми я знаком.
Для стандартных юнит-тестов (PHP-кода) подойдёт PHPUnit и SimpleTest. С помощью данных инструментов можно протестировать базовый функционал серверной стороны, написанной на PHP.
Для тестирования JavaScript существует множество фреймворков и плагинов, таких как qUnit и CodeCoverage
Для эмуляции действий человека хорошо подойдёт Selenium. С помощью данного инструмента можно протестировать например такие действия как нажатие кнопки или ссылки в браузере.
Visual Studio обладает встроенными инструментами для юнит-тестирования.
Книги
Книги — хороший метод изучить что-либо новое. Именно в книгах авторы стараются описать как можно больше и понятным языком. По этому я решил, что список из хороших книг по TDD не будет лишним:
- Agile Web Application Development with Yii1.1 and PHP5 — книга на английском, ориентирована на изучающих Yii фреймворк, но очень хорошо и простым языком описывает использование TDD-методики .
- К.Бек — Экстремальное программирование: разработка через тестирование — очень хорошая книга. Хорошо описывает методику доступным языком.
- Jason E. Sweat — Guide to PHP Design Patterns — книга про шаблоны проектирования, но в ней используется и поясняется методика TDD.
- V. Massol — JUnit in Action — Среда для модульного тестирования JUnit для Java. Книга хоть и ориентирована на Java-программистов, но будет полезна и для других программистов. Одна из лучших книг по TDD .
- Rick Mugridge, Ward Cunningham — Fit for Developing Software: Framework for Integrated Tests — книга описывает работу с TDD методикой в команде.
Итоги
Возможно TDD пугает вас тем, что вам необходимо знать ООП, шаблоны проектирования, юнит-тестирование, методики рефакторинга, но я уверен, что начав обучение вы улучшите свои знания в программировании.
Методология разработки ПО «TDD» будет полезна каждому разработчику в любом случае. Если вы познакомитесь с данной методикой, то у вас будет два варианта: использовать в своей дальнейшей работе и не использовать. В обеих случаях это будет полезно так, как в любом случае вы расширите свой кругозор.
Послесловие
Этот пост был написан человеком с ником Mirgorod (удаленным/деактивирован пользователем habrahabr). Я его выцепил из кеша яндекса и дополним одним коментарием.